package com.zijidelu.luframework.domain.model.aggregate;

import com.zijidelu.luframework.base.model.DataModel;
import com.zijidelu.luframework.domain.model.entity.Entity;
import com.zijidelu.luframework.utils.lang.reflect.bean.XReflectUtil;

/**
 * 聚合根工厂类。
 * <p>
 * 该类提供了创建聚合根实例的静态方法。
 *
 * @author ZIJIDELU
 * @datetime 2025/11/28 10:39
 */
public class AggregateRootFactory {
    /**
     * 创建聚合根。
     * <p>
     * 该方法根据聚合根类和实体对象创建聚合根实例，并初始化它。
     *
     * @param aggregateRootClass 聚合根类
     * @param entity             实体对象
     * @param <D>                数据模型类型
     * @param <E>                实体类型
     * @param <A>                聚合根类型
     * @return 初始化后的聚合根实例
     */
    public static <D extends DataModel, E extends Entity<D>, A extends AggregateRoot<D, E>>
    A from(Class<A> aggregateRootClass, E entity) {
        final A a = XReflectUtil.of(aggregateRootClass).newInstance(entity);
        a.initialize();
        return a;
    }

}
